There is a variety of known rule based systems for processing business information, including, production systems, business rules engines, expert systems, event-driven architectures, and decision matrices. These systems often use sequential algorithms or inferential algorithms to process data against specific rules. Although these algorithms have certain benefits, they also present various problems which render the processing of such rules inefficient, difficult, and cumbersome.
For example, sequential algorithms typically process data by applying rules in a specified order. As a result, sequential algorithms can quickly process data and make simple repetitive decisions. However, sequential algorithms are often difficult to implement when using complex logic that includes many interdependent rules. Moreover, sequential algorithms often need to repetitively loop through the rules multiple times when trying to solve inference style problems. As a result, sequential algorithms can be time consuming and cumbersome.
Inference algorithms, typically involve rete-style forward or backward chaining algorithms. Thus, unlike sequential algorithms, the order in which a rule is executed is dynamically decided by the algorithm as it processes the rules. As such, it is not necessary to understand the interrelationships of rules at the time they are designed. However, inference algorithms often process rules and data in a time consuming and inefficient manner. To this end, when using inference algorithms, all rules are typically evaluated against all data stored in a database. Inference algorithms do not distinguish between data and rules that have already been evaluated, and thus, the same rules are often evaluated against the same data multiple times before a decision is rendered. Adding to theses inefficiencies, the logic used in inference algorithms is difficult to understand and visualize, and thus, is susceptible to having many unexpected bugs. Debugging these bugs can be very difficult because rules can interact in unexpected ways at runtime. Additionally, bugs are difficult to recreate because the algorithm is not guaranteed to evaluate the rules in the same order each time.
There is a long felt need for a system and method that can efficiently process data in terms of time and processor resources yet dynamically adjust to the changing conditions of the data being analyzed.